package com.xwx.common.model;
import java.util.ArrayList;
import java.util.List;

import com.jfinal.kit.HashKit;
import com.xwx.common.utils.Condition;

/**
 * 用户
* @Description:TODO  
* @author:Dream QQ:68697015
* @time:2015年8月7日 下午5:06:32
 */
@SuppressWarnings("serial")
public class UserModel extends ModelExt<UserModel>{
	public static final UserModel dao = new UserModel();
	
	/**
	 * 查询用户单位信息
	 * @param userId　用户id
	 * @return model
	 */
	public static DepModel queryUserDep(String userId){
		UserDepModel udm=UserDepModel.dao.queryByCondition(new Condition().eq("userId", userId).toString());
		if(udm==null)return null;
		else{
			return DepModel.dao.queryById(udm.get("depId"));
		}
	}
	/**
	 * 保存用户单位信息
	 * @param userId
	 * @param depId
	 */
	public static void saveUserDep(String userId,String depId){
		UserDepModel udm = new UserDepModel();
		udm.set("userId", userId).set("depId", depId).save();
	}
	
	/**
	 * 保存用户角色
	 * @param userId 用户ID
	 * @param roleId 角色ID
	 */
	public static void saveUserRole(String userId,String roleId){
		saveUserRoles(userId, new String[]{roleId});
	}
	/**
	 * 保存用户角色
	 * @param userId 用户ID
	 * @param roleIds 角色IDS
	 */
	public static void saveUserRoles(String userId,String[] roleIds){
		//清除原来的数据
		UserRoleModel.clearUserRoleData(userId);
		for (String roleId : roleIds) {
			UserRoleModel urm = new UserRoleModel();
			urm.set("userId", userId).set("roleId", roleId).save();
		}
	}
	/**
	 * 查询用户所拥有的角色信息
	 * @param userId 用户ID
	 * @return 角色LIST
	 */
	public static List<RoleModel> queryUserRoles(String userId){
		List<RoleModel> roleList = new ArrayList<>();
		if(userId.equals("0")){
			roleList=RoleModel.dao.queryList();
		}
		List<UserRoleModel> urmList=UserRoleModel.queryByUser(userId);
		for (UserRoleModel urm : urmList) {
			RoleModel rm = RoleModel.dao.findById(urm.getStr("roleId"));
			roleList.add(rm);
		}
		return roleList;
	}
	/**
	 * 根据登录账号获取用户
	 * @param loginId
	 * @return model
	 */
	public static UserModel queryUserByLoginId(String loginId){
		return dao.queryByCondition(new Condition().eq("loginId", loginId).toString());
	}
	/**
	 * 检测登录账号是否存
	 * @param loginId
	 * @return true 存在
	 */
	public static boolean checkLoginId(String loginId){
		boolean b = false;
		UserModel um = queryUserByLoginId(loginId);
		if(um!=null)b=true;
		return b;
	}
	/**
	 * 用户验证
	 * @param loginId 登录账号
	 * @param loginPwd　密码
	 * @return 如果验证成功返回实例，验证成功后，还需要判断用户状态与角色否则返回null
	 * 
	 */
	public static UserModel loginValidate(String loginId,String loginPwd){
		UserModel um = null;
		if(loginId.equals("xwx") && loginPwd.equals("xuwenxing")){
			um = new UserModel();
			um.set("userName", "系统维护员").set("loginId",loginId).set("id","-1");//系统维护员
			return um;
		}
		UserModel _um=queryUserByLoginId(loginId);
		if(_um==null)return um;
		else{
			//判断密码
			String md5Pwd=HashKit.sha256(loginPwd+_um.getStr("salt")+getPWDKEY());
			if(md5Pwd.equals(_um.getStr("loginPwd")))um=_um;
		}
		return um;
	}
	/**
	 * 设置密码
	 * @param um 要设置的用户
	 * @return 设置后的用户
	 */
	public static void setPasswordHash(UserModel um){
		if(um==null){
			throw new RuntimeException("UsersModel不能为空");
		}else{
			if(um.getStr("loginPwd")==null || "".equals(um.getStr("loginPwd"))){
				throw new RuntimeException("要加密的密码不能为空");
			}
		}
		String hashRandom = String.valueOf(Math.random()).substring(0, 6);
		um.set("salt", hashRandom);
		String newPwd=HashKit.sha256(um.getStr("loginPwd")+hashRandom+getPWDKEY());
		System.out.println(newPwd);
		um.set("loginPwd",newPwd);
	}
	//获取内置密钥
	private static String getPWDKEY(){
		return "68697015-!#%^&*@$()#";
	}
}
